home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src890906.arc / ARPDUMP.C < prev    next >
C/C++ Source or Header  |  1989-08-12  |  1KB  |  59 lines

  1. #include <stdio.h>
  2. #include "global.h"
  3. #include "mbuf.h"
  4. #include "timer.h"
  5. #include "arp.h"
  6. #include "netuser.h"
  7.  
  8. void
  9. arp_dump(bpp)
  10. struct mbuf **bpp;
  11. {
  12.     struct arp arp;
  13.     struct arp_type *at;
  14.     int is_ip = 0;
  15.  
  16.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  17.         return;
  18.     printf("ARP: len %d",len_mbuf(*bpp));
  19.     if(ntoharp(&arp,bpp) == -1){
  20.         printf(" bad packet\n");
  21.         return;
  22.     }
  23.     if(arp.hardware < NHWTYPES)
  24.         at = &Arp_type[arp.hardware];
  25.     else
  26.         at = NULLATYPE;
  27.  
  28.     /* Print hardware type in Ascii if known, numerically if not */
  29.     printf(" hwtype %s",smsg(Arptypes,NHWTYPES,arp.hardware));
  30.  
  31.     /* Print hardware length only if unknown type, or if it doesn't match
  32.      * the length in the known types table
  33.      */
  34.     if(at == NULLATYPE || arp.hwalen != at->hwalen)
  35.         printf(" hwlen %u",arp.hwalen);
  36.  
  37.     /* Check for most common case -- upper level protocol is IP */
  38.     if(at != NULLATYPE && arp.protocol == at->iptype){
  39.         printf(" prot IP");
  40.         is_ip = 1;
  41.     } else {
  42.         printf(" prot 0x%x prlen %u",arp.protocol,arp.pralen);
  43.     }
  44.     switch(arp.opcode){
  45.     case ARP_REQUEST:
  46.         printf(" op REQUEST");
  47.         break;
  48.     case ARP_REPLY:
  49.         printf(" op REPLY");
  50.         break;
  51.     default:
  52.         printf(" op %u",arp.opcode);
  53.         break;
  54.     }
  55.     if(is_ip)
  56.         printf(" target %s",inet_ntoa(arp.tprotaddr));
  57.     printf("\n");
  58. }
  59.